<?php
// Suppression des slashes dans les superglobales
if(get_magic_quotes_gpc()) {
	$_GET = array_map('stripslashes', $_GET);
	$_POST = array_map('stripslashes', $_POST);
	$_COOKIE = array_map('stripslashes', $_COOKIE);
}

/**
 * Crée un objet GlobalVar à partir d'une variable GET
 * @param String $name Variable
 * @return GlobalVar l'objet globalVar
 */
function GET($name){
	if(isset($_GET[$name])) return new GlobalVar($_GET[$name]);
	return new GlobalVar(null);
}

/**
 * Crée un objet GlobalVar à partir d'une variable POST
 * @param String $name Variable
 * @return GlobalVar l'objet globalVar
 */
function POST($name){
	if(isset($_POST[$name])) return new GlobalVar($_POST[$name]);
	return new GlobalVar(null);
}

/**
 * Crée un objet GlobalVar à partir d'une variable COOKIE
 * @param String $name Variable
 * @return GlobalVar l'objet globalVar
 */
function COOKIE($name){
	if(isset($_COOKIE[$name])) return new GlobalVar($_COOKIE[$name]);
	return new GlobalVar(null);
}

/**
 * Crée un objet FileVar à partir d'une variable FILES
 * @param String $name Variable
 * @return FileVar l'objet FileVar
 */
function FILES($name){
	if(isset($_FILES[$name])) return new FileVar($_FILES[$name]);
	return new FileVar(null);
}

/**
 * Classe GlobalVar
 * Permet de simplifier l'utilisation des variables globales en leur ajoutant des fonctions de base.
 * @author Gaetan Collaud
 */
class GlobalVar {
	/**
	 * @var Mixed Le contenu de la variable
	 */
	private $v = null;
	/**
	 * Encodage du site
	 */
	const ENCODING = 'UTF-8';

	/**
	 * Le constructeur. Récupère le contenu de la variable
	 * @param Mixed $v le contenu de la variable
	 */
	public function __construct($v){
		$this->v = $v;
	}

	/**
	 * Retourne la valeur de la variable
	 * @return Mixed la valeur
	 */
	public function value(){
		return $this->v;
	}

	/**
	 * Vérifie si la variable existe.
	 * @return boolean true si la variable existe
	 */
	public function exist(){
		return !is_null($this->v);
	}

	/**
	 * Vérifie si la variable est vide
	 * @return boolean true si la variable est vide
	 */
	public function vide(){
		$v = trim($this->v);
		return empty($v);
	}

	/**
	 * Echape une variable pour SQL. Utilise la méthode escape de la classe Sql.
	 * @return String la variable échapée
	 */
	public function SqlEscape(){
		return Sql::escape($this->v);
	}

	/**
	 * Echape les caractères html pour afficher pleinement le texte.
	 * @return String la variable échapée
	 */
	public function html(){
		return htmlentities($this->v, ENT_QUOTES, self::ENCODING);
	}

	public function toInt(){
		return intval($this->v);
	}
}

/**
 * FileVar
 * Comme GlobalVar, permet de simplifier l'utilisation des fichiers envoyés
 */
class FileVar
{
	private $name		= null;
	private $tmpName	= null;
	private $size		= null;
	private $type		= null;

	/**
	 * Constructeur
	 * @param Array $v le contenu de la variable
	 */
	public function __construct($v){
		if(!is_null($v)){
			$this->name		= $v['name'];
			$this->tmpName	= $v['tmp_name'];
			$this->size		= $v['size'];
			$this->type		= $v['type'];
		}
	}

	/**
	 * Retourne le nom du fichier
	 * @return String le nom du fichier
	 */
	public function getName(){
		return $this->name;
	}

	/**
	 * Retourne la taille du fichier en octet
	 * @return int la taille du fichier
	 * @see tailleMax
	 */
	public function getSize(){
		return $this->size;
	}

	/**
	 * Retourne le type MIME du fichier
	 * @return String le type du fichier
	 */
	public function getType(){
		return $this->type;
	}

	/**
	 * Déplace le fichier temporaire vers sa destination final
	 * @param String $dest le fichier de destination
	 * @return Boolean true si tout s'est bien passé
	 */
	public function move($dest){
		return move_uploaded_file($this->tmpName, $dest);
	}

	/**
	 * Vérifie si un fichier n'est pas trop gros
	 * @param int $mo le nombre de MégaOctet
	 * @param int $ko le nombre de KiloOctet
	 * @param int $o le nombre d'Octet
	 * @return Boolean true si les fichier est plus petit que la limite autorisé
	 */
	public function tailleMax($mo, $ko=0, $o=0){
		return $this->size <= ($mo*1024^2 + $ko*1024 + $o);
	}
}
?>
